Guten Morgen Jörg
zu 1) Gegenfrage: Warum willst du unbedingt () bei e haben. :-)
nee ernsthaft:
mit Dim e() as Integer legst du fest, dass e ein Datenfeld mit einer unbekannten Anzahl von Integerzahlen ist.
mit n=2 und Redim e(n) legst du fest, dass das Datenfeld e bis zu 3 Integerzahlen aufnehmen kann.
(Es ginge auch Dim e(2) as Integer.)
VBA weiß es also: e ist ein Datenfeld. Alles klar. Null problemo.
In deinem Beispiel funktioniert auch e() = j(r). Ob man die Klammern immer schreiben darf, weiß ich nicht. Ich tue es nie, weil es mich eher verwirren würde. Die Klammern im Code (außerhalb der Deklaration Dim ...) verbinde ich eher mir dem Aufruf von Funktionen und Prozeduren, wie beispielsweise j(r).
Um Datenfelder besser zu erkennen, schreibe ich also keine Klammern sondern benenne Sie mit dem Präfix a_ (a für array)
Dim a_strFarben(2) as String
a_strFarben(0) ="rot"
a_strFarben(1) = "gelb"
a_strFarben(2) = "grün"
zu 2) Function j( ByVal r As Integer ) As Variant
Variant ist der einzige Datentyp, der Datenfelder aufnehmen kann. Such doch mal in der Visual Basic Hilfe (F1) die Artikel zu "Variant Datentyp" und zu "Array Funktion"
zu 3) Ja. j ist der Name der Function. du hast ihn mit Function j ... festgelegt. Ich benenne Functionen gerne mit dem Präfix fct. Dein Beispiel hätte bei mir so ausgesehen:
Public Function fctArrayZurückgeben(ByVal par_intFaktor as Integer) as Variant
'par_: um anzuzeigen, dass dies ein Parameter ist, der der Funktion übergeben wurde.
...
End Function
Testprozedur:
Public sub subTesteFctArrayZurückgeben()
Dim intFaktor as Integer
Dim a_intErgebnis() as Integer
...
intFaktor = 5
...
a_intErgebnis = fctArrayZurückgeben(intFaktor)
...
End Sub
Ich weiß. Das ist viel Schreibarbeit. Doch Intellisense hilft und bei größeren Projekten zahlt sich das aus. Sonst verliert man schnell die Übersicht. Was ist n,r,j ...?
Viel Spaß noch mit VBA.
Heiko
|